#include "includes.h"
#include "hellowinproc.h"

/*********************************
 * @函数功能：   主程序入口
 *********************************/ 
int MiniGUIMain(int argc, char const *argv[])
{
    MSG Msg;
    HWND hMainWnd;
    MAINWINCREATE CreateInfo;

/**
 * MiniGUI-Threads      : _MGRM_THREADS;
 * MiniGUI-Processes    : _MGRM_PROCESSES and _LITE_VERSION;
 * MiniGUI-Standalone   : _MGRM_STANDALONE, _LITE_VERSION, and _STAND_ALONE. 
 */
#ifdef _MGRM_PROCESSES 
    JoinLayer(NAME_DEF_LAYER, "HelloWorld", 0, 0); /* JoinLayer是MiniGUI-Processes的特殊功能 */
#endif

    CreateInfo.dwStyle = WS_VISIBLE | WS_BORDER | WS_CAPTION;   /* 窗口样式，初始可见，具有边框和标题栏 */
    CreateInfo.dwExStyle = WS_EX_NONE | WS_EX_TROUNDCNS | WS_EX_BROUNDCNS;                          /* 窗口扩展样式：没有扩展样式 */
    CreateInfo.spCaption = "Hello, World";                      /* 窗口标题 */
    CreateInfo.hMenu = 0;                                       /* 窗口主菜单 */
    CreateInfo.hCursor = GetSystemCursor(0);                    /* 窗口光标：默认系统光标 */
    CreateInfo.hIcon = 0;                                       /* 窗口图标：无 */
    CreateInfo.MainWindowProc = HelloWinProc;                   /* 所有发送到该窗口的消息由该函数处理 */
    CreateInfo.lx = 0;      /* 左 */                            /* 窗口在屏幕上的位置和大小 */
    CreateInfo.ty = 0;      /* 上 */
    CreateInfo.rx = 500;    /* 右 */
    CreateInfo.by = 500;    /* 下 */
    CreateInfo.iBkColor = COLOR_lightwhite;                     /* 窗口背景设置为白色 */
    CreateInfo.dwAddData = 0;                                   /* 主窗口其他数据 */
    CreateInfo.hHosting = HWND_DESKTOP;                         /* 主窗口的托管窗口为桌面窗口 */

    hMainWnd = CreateMainWindow(&CreateInfo);                   /* 创建主窗口，返回所创建的主窗口的句柄 */
    if(hMainWnd == HWND_INVALID)
        return -1;

    ShowWindow(hMainWnd, SW_SHOWNORMAL);                        /* 显示窗口：显示类型为（显示、置顶） */
    /* 进入消息循环 获取MSG_QUIT推出循环*/
    while(GetMessage(&Msg, hMainWnd)){                          /* 从消息队列中获取一条消息 */                          
        TranslateMessage(&Msg);                                 /* 将按键消息转换为MSG_CHAR 消息，然后将该消息发送给窗口过程函数 */
        DispatchMessage(&Msg);                                  /* 将消息发送到目标窗口消息处理函数 */
    }

    MainWindowThreadCleanup(hMainWnd);                          /* 清理系统资源 */

    return 0;
}

#ifndef _MGRM_PROCESSES
#include <minigui/dti.c>
#endif

